查看原文
其他

【连载】STM8L051F3_04_PWR应用

光神 物联网IoT开发 2021-01-31

大家晚上好,我是杰杰,应昨天的一位网友要求,今天先更新一下stm8L系列的特色——低功耗模式及源码。


分享一首正能量歌曲

本章介绍STM8L051F3的PWR相关知识,并重点介绍它的低功耗模式与应用。内容分为以下几部分:

  • 低功耗模式介绍

  • WFI模式应用

1、低功耗模式介绍

STM8L系列就是STM8的低功耗系列,所以该系列的主要特点就是低功耗。STM8L051F3低功耗模式如下图:

注:在执行HALT指令之前,应用程序必须通过清除相应的外设中断配置寄存器的中断标志位来清除所有的外设中断,否则HALT指令不会被执行,程序继续往下执行。

Wait mode(等待模式):Wait mode有两种:一种是WFI(通过中断方式唤醒);另一种是WFE(通过事件方式唤醒)。执行WFI或WFE即可进入到相应的Wait mode。在该模式下,振荡器是保持运行的,CPU是停止运行的,但是可以选择相应的外设保持运行,在WFI/WFE模式下可使用中断/事件退出Wait mode。复位也是可以退出Wait mode。

Low power run mode(低功耗运行模式):进入该模式的方法是通过软件序列配置,在该模式下,CPU是运行的,也可以选择相应的外设运行,RAM的运行是通过低速振荡器时钟(LSI或LSE)来完成,Flash与EEPROM是停止的,电压管理器模式被配置为超低压模式(ULP),控制器可通过软件或者复位的方式来退出该模式。

Low power wait mode(低功耗等待模式):在低功耗运行模式下执行一个Wait(WFE)指令即可进入该模式,该模式处理CPU时停止运行的之外,其他的特点与Low power run mode相同,从该模式唤醒可以采用触发一个复位或者一个内部或外部时间,当被一个时间唤醒后,系统将返回到Low power run mode。该模式中,所有的中断必须被屏蔽,因为他们不能用于唤醒MCU。

Active-halt mode(活跃停机模式):该模式下,除了RTC外CPU和外设时钟是停止的,可通过触发一个RTC中断或外部中断或复位来退出。

Halt mode(停机模式):该模式下,CPU和外设时钟是停止的,可通过触发一个外部中断或复位来唤醒,只有少数外设具备从该模式唤醒的能力,通过软件配置可使唤醒时间低至6us。

上图中有一个Voltage regulator mode(电源稳压模式),MVR为主稳压模式,ULP为超低功耗模式。每一种低功耗模式都有其独特的应用场合,在一般的应用中,Wait mode(等待模式)Halt mode(停机模式)是比较常用的。下面介绍降低功耗的几种方法:

  • 降低系统频率

  • 关闭没有使用的外设时钟

  • 没有使用的IO口配置为内部上拉或下拉输入

  • 根据应用配置为相应的低功耗模式

2、WFI模式应用

2.1 WFI模式配置

本小节介绍如何使系统配置进入和退出WFI模式。使用的例程:STM8L051F3_04_PWR。例程中可通过LED1的状态判断是否进入了WFI低功耗状态。在主函数的循环中LED1的状态时每个300ms切换一次,但是进入低功耗后MCU的CPU停止停止,LED1状态不会进行切换,退出WFI模式使用的是外部中断的方法。因为使用的外设较少,进入WFI模式与不进入时功耗相差不明显。进入WFI模式比较简单,只需要调用一条语句:

wfi();      //进入wfi模式

2.2 例程介绍

程序的主函数如下:

void main(void)

{

  LED_Init();   //初始化LED1

  EXTI_Init();  //初始化EXTI

while(1)

{

    GPIO_ToggleBits(LED1_GPIO_PORT, LED1_GPIO_PINS); //对RGB_B的状态进行取反

delay_ms(300);

   wfi();      //进入wfi模式

}

}

中断函数如下(触发中断就会退出WFI模式,所以只需要清除标志位即可):

INTERRUPT_HANDLER(EXTI4_IRQHandler,12)

{

    /* In order to detect unexpected events during development,

       it is recommended to set a breakpoint on the following instruction.

    */

  //清除中断标志位

  EXTI_ClearITPendingBit(EXTI_IT_Pin4);

}


使用ST-LINK把程序下载到开发板中,按下KEY,LED1状态取反(退出WFI模式后主函数循环中LED1状态取反,然后又进入到WFI模式)。


源码获取:

在后台回复“STM8L


往期精彩回顾

STM8L051F3_0b_开发环境搭建

【连载】STM8L051F3_0d_基础介绍

【连载】STM8L051F3_01_GPIO应用

【连载】STM8L051F3_02_EXTI应用

【干货】老外的GitHub整理的stm32f4驱动库

【连载】openmv之色块追踪算法的改善

新年大书包-资料大放送

创客:

如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存